MOD = 10**9 + 7  # 定义模数

def main():
    n, m = map(int, input().split())  # 输入店的数量 n 和花的数量 m
    # 初始化 dp 数组，dp[i][j][k] 表示遇 i 次店、j 次花、剩 k 斗酒的方案数
    dp = [[[0] * (m + 1) for _ in range(m + 1)] for _ in range(n + 1)]
    dp[0][0][2] = 1  # 初始状态：0 次店、0 次花、2 斗酒

    # 动态规划求解
    for i in range(n + 1):  # 遍历店的次数
        for j in range(m + 1):  # 遍历花的次数
            for k in range(m + 1):  # 遍历酒的剩余量
                if dp[i][j][k] == 0:  # 如果当前状态不可达，跳过
                    continue
                if i < n and k * 2 <= m:  # 遇到店的情况：酒量翻倍
                    dp[i + 1][j][k * 2] = (dp[i + 1][j][k * 2] + dp[i][j][k]) % MOD
                if j < m and k > 0:  # 遇到花的情况：酒量减 1
                    dp[i][j + 1][k - 1] = (dp[i][j + 1][k - 1] + dp[i][j][k]) % MOD

    # 输出结果：遇 n 次店、m-1 次花、剩 1 斗酒的方案数
    print(dp[n][m - 1][1])

if __name__ == "__main__":
    main()